import os
from datetime import datetime

# 模块全局变量，用于跟踪是否已初始化及文件名
_initialized = False
_filename = None


def chatAiDbInit(filename):
    """
    初始化日志文件，确保文件存在且仅初始化一次

    Args:
        filename (str): 要初始化/使用的日志文件名
    """
    global _initialized, _filename

    if _initialized:
        return  # 已初始化则直接返回

    # 检查文件是否存在，不存在则创建空文件
    if not os.path.exists(filename):
        open(filename, 'w').close()

    _filename = filename  # 保存文件名
    _initialized = True  # 标记已初始化


def chatAiAdd(role, msg):
    """
    追加格式化日志记录到文件

    Args:
        role (str): 角色标识（如'system'、'user'、'ai'）
        msg (str): 要记录的消息内容

    Raises:
        RuntimeError: 如果未先调用chatAiDbInit会抛出异常
    """
    global _filename, _initialized

    # 检查是否已初始化
    if not _initialized:
        raise RuntimeError("请先调用chatAiDbInit进行初始化")

    # 获取当前时间并格式化（精确到秒）
    timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")

    # 构造日志行（自动添加换行符）
    log_line = f"[{timestamp}]{role}:{msg}\n"

    # 以追加模式写入文件（自动处理文件打开/关闭）
    with open(_filename, 'a', encoding='utf-8') as f:
        f.write(log_line)


'''
请注意你是我的编程助手，现在我需要你帮我生一个存储模块的代码，要求如下：
1、该模块有两个函数，chatAiDbInit, chatAiAdd(role, msg);
2、chatAiDbInit(filename),该函数主要是初始化记录存储文件，如果文件不存在则创建文件，如果文件存在则以追加的方式写入记录，
该文件只会初始化一次，后面调用就不用打开了
3、chatAiAdd(role, msg)，该函数主要是写入记录数据格式为[时间戳]role:msg,时间戳的精度到秒；
4、请用Python 实现 并加上注释。
'''
if __name__ == "__main__":
    chatAiDbInit("chat.log")

    chatAiAdd("user", "nihao")
    chatAiAdd("ai","can i help you")